home *** CD-ROM | disk | FTP | other *** search
/ The Sunday Times: The Month 2004 August / The Sunday Times - The Month 2004-08.iso / pc / engine / shell / shell.swf / scripts / frame_2 / DoAction_2.as next >
Encoding:
Text File  |  2004-07-06  |  11.7 KB  |  337 lines

  1. UsageData = {dbg:function(str)
  2. {
  3.    trace("UsageData." + str);
  4. },getIssueNumber:function()
  5. {
  6.    return Tardis.Settings.version;
  7. },init:function()
  8. {
  9.    var trySOprop = function(objSo, name, ┬ºset┬º)
  10.    {
  11.       var val = objSo.data[name];
  12.       if(val == null)
  13.       {
  14.          objSo.data[name] = eval("set");
  15.          return eval("set");
  16.       }
  17.       return val;
  18.    };
  19.    var makeUID = function()
  20.    {
  21.       return Math.random().toString().substr(2,7) + "" + Math.random().toString().substr(2,7);
  22.    };
  23.    var parent = this;
  24.    this.soIssue = SharedObject.getLocal("TardisV" + Tardis.Settings.version);
  25.    this.soGlobal = SharedObject.getLocal("TardisGlobal");
  26.    if(this.soIssue.getSize() > this.KB_LIMIT)
  27.    {
  28.       this.dbg("size has exceeded " + this.KB_LIMIT / 1024 + "Kb\nClearing log and ping data...");
  29.       this.soIssue.data.logData = [];
  30.       this.soIssue.data.pingData = [];
  31.       this.dbg("cleared. size is now  " + this.soIssue.getSize() / 1024 + "Kb");
  32.    }
  33.    var strUID = this.soGlobal.data.UID;
  34.    if(strUID == null || strUID == "")
  35.    {
  36.       this.FirstTime = true;
  37.       strUID = makeUID();
  38.    }
  39.    else
  40.    {
  41.       this.FirstTime = false;
  42.    }
  43.    this.soGlobal.data.UID = this.UID = strUID;
  44.    if(this.soIssue.data.firstTimeIssueRun == null)
  45.    {
  46.       trace("-----------------------------------------------------------------");
  47.       trace("This is the first time issue " + Tardis.Settings.version + " has been run...");
  48.       trace("-----------------------------------------------------------------");
  49.       this.FirstTime = true;
  50.       UsageData.setSoProp("soIssue","firstTimeIssueRun",false);
  51.    }
  52.    else
  53.    {
  54.       this.FirstTime = false;
  55.    }
  56.    this.logData = trySOprop(this.soGlobal,"logData",[]);
  57.    this.pingData = trySOprop(this.soIssue,"pingData",[]);
  58.    this.optin = trySOprop(this.soGlobal,"optin",true);
  59.    this.soIssue.flush();
  60.    this.soGlobal.flush();
  61.    this.lastTime = null;
  62.    this.lastPage = null;
  63. },addPageEntry:function(pageValue)
  64. {
  65.    Tardis.debug.addProcess("monitorTracking","UsageData : addPageEntry : lastPage : " + this.lastPage);
  66.    var now = getTimer();
  67.    var sessionGroup = this.logData[this.logData.length - 1];
  68.    if(this.lastTime != null)
  69.    {
  70.       var timeValue = Math.round((now - this.lastTime) / 1000);
  71.       var currEntries = sessionGroup.entries;
  72.       currEntries.push(timeValue + "." + this.lastPage);
  73.    }
  74.    else
  75.    {
  76.       sessionGroup.startTime = this.getTimeStamp();
  77.    }
  78.    Tardis.debug.addProcess("monitorTracking","UsageData : addPageEntry : lastPage : duration : " + timeValue);
  79.    Tardis.debug.addProcess("monitorTracking","UsageData : addPageEntry : pageValue : " + pageValue);
  80.    Tardis.debug.showProcessPath("monitorTracking");
  81.    Tardis.debug.clearProcessPath("monitorTracking");
  82.    this.lastTime = now;
  83.    this.lastPage = pageValue;
  84. },addAdvertEntry:function(val, strType)
  85. {
  86.    this.penultimateEntry = this.lastPage;
  87.    Tardis.debug.addProcess("monitorTracking","UsageData.addAdvertEntry()");
  88.    Tardis.debug.addProcess("monitorTracking","penultimateEntry: " + this.penultimateEntry);
  89.    Tardis.debug.addProcess("monitorTracking","Tardis.Sections.length + 1: " + (Tardis.Sections.length + 1));
  90.    if(strType == "promo")
  91.    {
  92.       val += "p";
  93.    }
  94.    Tardis.debug.addProcess("monitorTracking","val : " + val);
  95.    var strLog = Tardis.Sections.length + 1 + "." + val;
  96.    Tardis.debug.addProcess("monitorTracking","strLog: " + strLog);
  97.    Tardis.debug.showProcessPath("monitorTracking");
  98.    Tardis.debug.clearProcessPath("monitorTracking");
  99.    this.addPageEntry(strLog);
  100. },addWebAdvertEntry:function(val)
  101. {
  102.    var currentPage = this.lastPage;
  103.    Tardis.debug.addProcess("monitorTracking","UsageData.addWebAdvertEntry()");
  104.    Tardis.debug.addProcess("monitorTracking","currentPage: " + currentPage);
  105.    Tardis.debug.addProcess("monitorTracking","Tardis.Sections.length + 1: " + (Tardis.Sections.length + 1));
  106.    Tardis.debug.addProcess("monitorTracking","val: " + val);
  107.    var strLog = Tardis.Sections.length + 1 + "." + val;
  108.    this.addPageEntry(strLog);
  109.    this.addPageEntry(currentPage);
  110.    Tardis.debug.showProcessPath("monitorTracking");
  111.    Tardis.debug.clearProcessPath("monitorTracking");
  112. },addAdvertEndEntry:function()
  113. {
  114.    Tardis.debug.addProcess("monitorTracking","UsageData.addAdvertEndEntry()");
  115.    this.addPageEntry(this.penultimateEntry);
  116.    this.aolRoot = null;
  117.    Tardis.debug.addProcess("monitorTracking","should add the previous entry again - penultimateEntry: " + this.penultimateEntry);
  118.    Tardis.debug.showProcessPath("monitorTracking");
  119.    Tardis.debug.clearProcessPath("monitorTracking");
  120. },addAolEntry:function(subsectionID)
  121. {
  122.    Tardis.debug.addProcess("monitorTracking","UsageData.addAolEntry()");
  123.    if(this.aolRoot == null)
  124.    {
  125.       trace("");
  126.       trace("");
  127.       trace("");
  128.       trace("set the root");
  129.       var root;
  130.       trace("checking for \'.\' in " + this.lastPage);
  131.       var arrIdElements = this.lastPage.split(".");
  132.       trace("arrIdElements: " + arrIdElements);
  133.       if(arrIdElements.length <= 2)
  134.       {
  135.          root = this.lastPage;
  136.       }
  137.       else
  138.       {
  139.          root = arrIdElements[0] + "." + arrIdElements[1];
  140.       }
  141.       trace("root: " + root);
  142.       Tardis.debug.addProcess("monitorTracking","-- aolRoot set to " + root);
  143.       this.aolRoot = root;
  144.    }
  145.    if(subsectionID == null)
  146.    {
  147.       var strLog = this.aolRoot;
  148.    }
  149.    else
  150.    {
  151.       var strLog = this.aolRoot + "." + subsectionID;
  152.    }
  153.    this.addPageEntry(strLog);
  154. },addAolEndEntry:function(subsectionID)
  155. {
  156.    Tardis.debug.addProcess("monitorTracking","addAolEndEntry()");
  157.    if(subsectionID >= 2 && subsectionID <= 5)
  158.    {
  159.       Tardis.debug.addProcess("monitorTracking","-- just left an intro section (" + subsectionID + ")");
  160.       Tardis.debug.addProcess("monitorTracking","-- we\'re displaying the hub");
  161.       Tardis.debug.addProcess("monitorTracking","-- so just add the base strLog: " + this.aolRoot);
  162.       this.addAolEntry();
  163.    }
  164. },addSessionGroup:function()
  165. {
  166.    var objG = {time:this.getTimeStamp(),entries:new Array(),startTime:null,version:Tardis.Settings.version};
  167.    this.logData.push(objG);
  168. },addPingEntry:function()
  169. {
  170.    var obj = {firsttime:this.FirstTime,time:this.getTimeStamp()};
  171.    this.pingData.push(obj);
  172. },sendToServer:function()
  173. {
  174.    var strURL = "";
  175.    if(this.pingData.length > 0)
  176.    {
  177.       var objP = this.pingData[0];
  178.       var strBaseURL = this.PING_URL + "?";
  179.       var strQuery = "cd=" + Tardis.Settings.version + "&u=" + this.UID + "&t=" + objP.time;
  180.       if(objP.firsttime == true)
  181.       {
  182.          strQuery += "&first=1";
  183.       }
  184.       Tardis.debug.addProcess("monitorLogSize","UsageData.sendToServer()");
  185.       Tardis.debug.addProcess("monitorLogSize","-- pingData length: " + this.pingData.length);
  186.       Tardis.debug.addProcess("monitorLogSize","-- send to: " + this.PING_URL);
  187.       Tardis.debug.addProcess("monitorLogSize","-- data string: " + strQuery);
  188.    }
  189.    else
  190.    {
  191.       var objGroup = this.logData[0];
  192.       var arrEntries = objGroup.entries;
  193.       var len = arrEntries.length;
  194.       Tardis.debug.addProcess("monitorLogSize","UsageData.sendToServer()");
  195.       Tardis.debug.addProcess("monitorLogSize","-- logData length: " + this.logData.length);
  196.       if(len == 0)
  197.       {
  198.          if(this.logData.length > 1)
  199.          {
  200.             Tardis.debug.addProcess("monitorLogSize","-- empty cached group - deleting");
  201.             this.logData.shift();
  202.          }
  203.          else
  204.          {
  205.             Tardis.debug.addProcess("monitorLogSize","-- no cached data - no new data");
  206.          }
  207.          if(this.logData.length > 1 && delete_counter < 100)
  208.          {
  209.             this.checkSend();
  210.          }
  211.          else
  212.          {
  213.             delete_counter = 0;
  214.          }
  215.          delete_counter++;
  216.          return undefined;
  217.       }
  218.       delete_counter = 0;
  219.       var len = Math.min(arrEntries.length,10);
  220.       var strBaseURL = this.LOG_URL + "?";
  221.       var strQuery = "";
  222.       strQuery += "cd=" + objGroup.version;
  223.       strQuery += "&u=" + this.UID;
  224.       strQuery += "&t=" + objGroup.time;
  225.       strQuery += "&s=" + objGroup.startTime;
  226.       strQuery += "&d=" + arrEntries.slice(0,len).join("_");
  227.       this.num_logs_sent = len;
  228.       Tardis.debug.addProcess("monitorLogSize","-- Sending " + this.num_logs_sent + " logs in this iteration...");
  229.    }
  230.    Tardis.debug.showProcessPath("monitorLogSize");
  231.    Tardis.debug.clearProcessPath("monitorLogSize");
  232.    strURL = strBaseURL + strQuery;
  233.    lingo("Flsh_usage_sendData(\"" + strURL + "\")");
  234.    this.active = true;
  235. },checkSend:function()
  236. {
  237.    if(this.active == false && (this.pingData.length > 0 || this.optin == true))
  238.    {
  239.       this.sendToServer();
  240.    }
  241.    else
  242.    {
  243.       this.dbg("no data to send");
  244.    }
  245. },onSent:function(success)
  246. {
  247.    Tardis.debug.addProcess("monitorTracking","UsageData.onSent() : success : " + success + ", UID : " + this.UID);
  248.    Tardis.debug.showProcessPath("monitorTracking");
  249.    Tardis.debug.clearProcessPath("monitorTracking");
  250.    with(this)
  251.    {
  252.       active = false;
  253.       if(success)
  254.       {
  255.          if(pingData.length > 0)
  256.          {
  257.             pingData.shift();
  258.          }
  259.          else
  260.          {
  261.             var entries = logData[0].entries;
  262.             entries.splice(0,num_logs_sent);
  263.             if(logData.length > 1 && entries.length == 0)
  264.             {
  265.                dbg("last group now empty - deleting");
  266.                logData.shift();
  267.             }
  268.          }
  269.          checkSend();
  270.       }
  271.       else
  272.       {
  273.          dbg("send failed");
  274.       }
  275.    }
  276. },deleteSoProp:function(SO, prop)
  277. {
  278.    delete this[SO].data[prop];
  279. },setSoProp:function(SO, prop, val, objName)
  280. {
  281.    Tardis.debug.addProcess("monitorSO","UsageData.setSoProp()");
  282.    Tardis.debug.addProcess("monitorSO","-- SO:" + SO);
  283.    Tardis.debug.addProcess("monitorSO","-- prop:" + prop);
  284.    Tardis.debug.addProcess("monitorSO","-- val:" + val);
  285.    if(objName != null)
  286.    {
  287.       var tmpObj = this.getSoProp(SO,objName);
  288.       tmpObj[prop] = val;
  289.       this[SO].data[objName] = tmpObj;
  290.       Tardis.debug.addProcess("monitorSO","-- objName:" + objName);
  291.    }
  292.    else
  293.    {
  294.       this[SO].data[prop] = val;
  295.    }
  296.    Tardis.debug.showProcessPath("monitorSO");
  297.    Tardis.debug.clearProcessPath("monitorSO");
  298.    this[SO].flush();
  299.    return val;
  300. },setSoObj:function(SO, soObjName, obj)
  301. {
  302.    Tardis.debug.addProcess("monitorSO","UsageData.setSoObj()");
  303.    Tardis.debug.addProcess("monitorSO","-- SO:" + SO);
  304.    Tardis.debug.addProcess("monitorSO","-- soObjName:" + soObjName);
  305.    for(var i in obj)
  306.    {
  307.       Tardis.debug.addProcess("monitorSO","-- obj[" + i + "]:" + obj[i]);
  308.    }
  309.    Tardis.debug.showProcessPath("monitorSO");
  310.    Tardis.debug.clearProcessPath("monitorSO");
  311.    this[SO].data[soObjName] = obj;
  312.    this[SO].flush();
  313.    return obj;
  314. },getSoProp:function(SO, prop)
  315. {
  316.    Tardis.debug.addProcess("monitorSO","UsageData.getSoObj()");
  317.    Tardis.debug.addProcess("monitorSO","-- SO:" + SO);
  318.    Tardis.debug.addProcess("monitorSO","-- prop:" + prop);
  319.    Tardis.debug.showProcessPath("monitorSO");
  320.    Tardis.debug.clearProcessPath("monitorSO");
  321.    return this[SO].data[prop];
  322. },setOptIn:function(val)
  323. {
  324.    this.optin = val;
  325.    this.setSoObj("soGlobal","optin",val);
  326. },getTimeStamp:function()
  327. {
  328.    var pf = function(nm)
  329.    {
  330.       nm = nm.toString();
  331.       return nm.length != 1 ? nm : "0" + nm;
  332.    };
  333.    var d = new Date();
  334.    var s = "" + pf(d.getUTCDate()) + "." + pf(d.getUTCMonth() + 1) + "." + d.getUTCFullYear() + "_" + pf(d.getUTCHours()) + "." + pf(d.getUTCMinutes()) + "." + pf(d.getUTCSeconds());
  335.    return s;
  336. },LOG_URL:null,PING_URL:null,KB_LIMIT:87040,DEBUG:"none",delete_counter:0,active:false};
  337.